<?php
declare(strict_types=1);

namespace SixShop\Message\Model;

use SixShop\Message\Entity\AnnouncementEntity;
use think\facade\Db;

/**
 * 系统公告模型
 */
class AnnouncementModel
{
    /**
     * 获取公告列表
     *
     * @param array $params 查询参数
     * @param int $page 页码
     * @param int $limit 每页数量
     * @return array
     */
    public function getList(array $params = [], int $page = 1, int $limit = 10)
    {
        $query = AnnouncementEntity::where('1=1');
        
        // 标题搜索
        if (!empty($params['title'])) {
            $query->where('title', 'like', '%' . $params['title'] . '%');
        }
        
        // 状态筛选
        if (isset($params['status']) && $params['status'] !== '') {
            $query->where('status', $params['status']);
        }
        
        // 类型筛选
        if (isset($params['type']) && $params['type'] !== '') {
            $query->where('type', $params['type']);
        }
        
        // 时间范围筛选
        if (!empty($params['start_time'])) {
            $query->where('create_time', '>=', strtotime($params['start_time']));
        }
        if (!empty($params['end_time'])) {
            $query->where('create_time', '<=', strtotime($params['end_time']));
        }
        
        // 获取总数
        $total = $query->count();
        
        // 获取分页数据
        $list = $query->order('id', 'desc')
            ->page($page, $limit)
            ->select()
            ->toArray();
        
        return [
            'list' => $list,
            'total' => $total,
            'page' => $page,
            'limit' => $limit,
        ];
    }
    
    /**
     * 获取单个公告详情
     *
     * @param int $id 公告ID
     * @return array|null
     */
    public function getDetail(int $id)
    {
        return AnnouncementEntity::find($id);
    }
    
    /**
     * 添加公告
     *
     * @param array $data 公告数据
     * @return int|bool
     */
    public function add(array $data)
    {
        $entity = new AnnouncementEntity();
        $result =$entity->save($data);
        if ($result) {
            return $entity->id ?: true; // 如果没有id属性，至少返回true表示成功
        }
        
        return false;
    }
    
    /**
     * 更新公告
     *
     * @param int $id 公告ID
     * @param array $data 更新数据
     * @return bool
     */
    public function update(int $id, array $data)
    {
        $entity = AnnouncementEntity::find($id);
        if (!$entity) {
            return false;
        }
        
        return $entity->save($data);
    }
    
    /**
     * 删除公告
     *
     * @param int $id 公告ID
     * @return bool
     */
    public function delete(int $id)
    {
        $entity = AnnouncementEntity::find($id);
        if (!$entity) {
            return false;
        }
        
        return $entity->delete();
    }
    
    /**
     * 批量删除公告
     *
     * @param array $ids 公告ID数组
     * @return bool
     */
    public function batchDelete(array $ids)
    {
        return AnnouncementEntity::destroy($ids);
    }
    
    /**
     * 获取有效的公告列表
     *
     * @param int $limit 获取数量
     * @return array
     */
    public function getValidList(int $limit = 5)
    {
        $now = time();
        
        return AnnouncementEntity::where('status', 1)
            ->where(function ($query) use ($now) {
                $query->where('start_time', 0)
                    ->whereOr('start_time', '<=', $now);
            })
            ->where(function ($query) use ($now) {
                $query->where('end_time', 0)
                    ->whereOr('end_time', '>=', $now);
            })
            ->order('type', 'desc')
            ->order('id', 'desc')
            ->limit($limit)
            ->select()
            ->toArray();
    }
}
